//node官方提供的加密模块
const crypto = require("crypto")

/* 
    MD5加密，实现对内容进行加密返回32位16进制结果，加密过程不可逆，无法解密
    参数: 
        str : 加密的内容
        secret : 要使用加密的密钥
*/
module.exports.getMD5 = function (str, secret = "qwertyuiop") {
    //表示采用md5的方式进行加密
    const md5 = crypto.createHash("md5")
    //md5算法继续加密，加密后返回16进制结果
    return md5.update(str + secret).digest("hex")
}

/* 
    SHA1加密 ,不可逆
    参数：
        str : 要加密的字符串
*/
module.exports.getSHA1 = function (str) {
    //表示采用SHA1的方式进行加密
    const sha1 = crypto.createHash("sha1")
    //SHA1算法继续加密，加密后返回16进制结果
    return sha1.update(str).digest("hex")
}

/* 
    Aes对称加密 
    参数：
        str : 要加密的字符串
        screct : 加密密钥
        vi : 默认参数
*/
module.exports.getEncAes128 = function (str, screct = "AAAAAAAAAAAAAAAA", vi = "FnJL7EDzjqWjcaY9") {
    //表示用aes-128-cbc的方式进行加密
    const cipheriv = crypto.createCipheriv("aes-128-cbc", screct, vi)
    //得到加密算法
    let enc = cipheriv.update(str, "utf-8", "hex")
    //进行转化位16进制
    enc += cipheriv.final("hex")
    return enc
}
/*
    Aes解密
 */
module.exports.getDecAes128 = function (str, screct = "AAAAAAAAAAAAAAAA", vi = "FnJL7EDzjqWjcaY9") {
    //确定加密算法
    const decipheriv = crypto.createDecipheriv("aes-128-cbc", screct, vi)
    //得到加密算法
    let dec = decipheriv.update(str, "hex", "utf-8")
    //进行转化位16进制
    dec += decipheriv.final("utf-8")
    return dec
}

/* 
    const result = getEncAes128(password)
    console.log("加密：" + result);
    const result2 = getDecAes128(result)
    console.log("解密：" + result2);
*/